package model;

import model.playingfield.PlayingField;

/**
 * 
 * @author christopher
 * Defines core functionality of the State
 */
public interface IState {
		
	/**
	 * Remove a player from the game
	 * @param player
	 */
	public void removePlayer(Player player);
		
	/**
	 * 
	 * @param player
	 */
	public void setCurrentPlayer(Integer player);
	
	/**
	 * Get players currently in the game
	 * @return
	 */
	public Player getPlayer(int player);
	
	/**
	 * Get current player
	 * @return
	 */
	public Integer getCurrentPlayer();
	
	/**
	 * Return a reference to the Statistics instance
	 * @return
	 */
	public Statistics[] getStatistics();
	
	/**
	 * Get playerLocations
	 * @return
	 */
	public Integer[][] getPlayerLocations();
	
	/**
	 * The following are functions for setting/getting the various
	 * state variables of the State.
	 */
	public void setDieRolled(boolean dieRolled);
	public boolean isDieRolled();
	
	public void setSpotSelected(boolean spotSelected);
	public boolean hasMoved();
	
	public void setMoveMade(boolean moveMade);
	public boolean isMoveMade();
	
	public void setGameInProgress(boolean gameInProgress);
	public boolean isGameInProgress();
	
	public void setCurrentDieValue(int currentDieValue);
	public int getCurrentDieValue();
	
	/**
	 * Resets all state variables
	 */
	public void resetStateVars();
	
	/**
	 * returns a reference to the playingfield
	 */
	public PlayingField getPlayingField();

	public int getNumOfPlayers();

	public void setBattle(Battle string);

	public Battle getBattle();
}